#!/usr/bin/env python
# -*- coding: utf-8 -*-


import pygame, os, sys, random
from pygame.locals import *
pygame.init()

vida = 3

def level1():
	# Carrega a musica de fundo
	pygame.mixer.init()
	pygame.mixer.music.load("sounds" + os.sep + "song2.mp3")
	pygame.mixer.music.set_volume(.7)
	pygame.mixer.music.play(-1)

	# Som de colisao com a tela
	pong = pygame.mixer.Sound('sounds' + os.sep + 'pong.wav')
	pong.set_volume(.8) 
	# Som de colisao com o bouncer
	som_barra = pygame.mixer.Sound('sounds' + os.sep + 'barra.wav')
	# Som de colisao com o tijolo
	som_tijolo = pygame.mixer.Sound('sounds' + os.sep + 'slide.wav')

	clock = pygame.time.Clock()
		 
	# Configuracao da tela
	largura_tela, altura_tela = 800, 600
	tela = pygame.display.set_mode((largura_tela,altura_tela), 0, 32)
	pygame.display.set_caption("Brick by Brick - Level 1")
	fundo = pygame.image.load("images" + os.sep + "fundolevel1.jpg").convert()
	gameover = pygame.image.load("images" + os.sep + "gameover2.jpg").convert()

	# Configuracao do tijolo
	tijolo = pygame.image.load("images" + os.sep + "tijolo2.png").convert()
	largura_tijolo, altura_tijolo = tijolo.get_size()
	tijolo_x, tijolo_y = (90, 100)

	# Configuracao da Barra
	imagem_barra = pygame.image.load('images' + os.sep + "bouncer3.png").convert_alpha()
	largura_barra, altura_barra = imagem_barra.get_size()
	barra_x, barra_y = (largura_tela/2 - largura_barra/2), (altura_tela - altura_barra * 6)

	# Configuracao da Bola
	imagem_bola = pygame.image.load('images' + os.sep + "ball4.png").convert_alpha()
	largura_bola, altura_bola = imagem_bola.get_size()
	bola_x, bola_y = (largura_tela/2 - largura_bola/2), 500
	posicao_inicial = (bola_x, bola_y)
	bola_varia_x = 3 # Velocidade
	bola_varia_y = 3

	morte = True
	vida = 3
	max_vidas = 5
	score = 0
	fundocor = (0,0,0)

	x = 90 # Posicao dos tijolos
	y = 0
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	lista = []

	for i in range(11):
		lista.append((x, y, x1, y1))
		x+= 55
		x1 = x + largura_tijolo 
			
	x = 150
	y += altura_tijolo
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	for i in range(9):
		lista.append((x, y, x1, y1))
		x += 55	
		x1 = x + largura_tijolo 
				
	x = 260
	y += altura_tijolo
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	for i in range(5):
		lista.append((x, y, x1, y1))
		x += 55	
		x1 = x + largura_tijolo

	sorteados = {} #### Nao da certo porque la em baixo (i) retorna (x,y,x1,y1)
	for i in range(20):
		sorteados[random.randint(0,len(lista))] = 0
			

	while True:
		bola_rect = imagem_bola 
		barra_rect = imagem_barra
		posicao_inicial = (barra_x+20, barra_y - 40)
		
		for event in pygame.event.get():
			if event.type == QUIT:
				exit()

			if event.type == KEYDOWN:
				if event.key == K_ESCAPE:
					exit()
				if event.key == K_SPACE:
					if morte:
						bola_varia_x, bola_varia_y = 5, 5
						morte = False
						
		pressed_keys = pygame.key.get_pressed()

		# Movimentando a bola
		bola_x += bola_varia_x
		bola_y += bola_varia_y

		# Movimentando a barra
		if pressed_keys[K_LEFT] and barra_x > 0:
			barra_x -= 10
		if pressed_keys[K_RIGHT] and barra_x < 680:
			barra_x += 10	
		if morte:
			bola_x, bola_y = barra_x + (largura_barra/2 - largura_bola/2), barra_y - altura_bola/1.40
			
		
		# Verificando a colisao com a tela
		if bola_x <= 0 or bola_x + largura_bola >= largura_tela:
			bola_varia_x = -bola_varia_x
			pong.play(0)
			
		if bola_y <= 0:
			bola_varia_y = -bola_varia_y
			pong.play(0)
				
		if bola_y <= barra_y:
			bola_varia_y = +bola_varia_y
			
		if bola_y + altura_bola >= 500: #evento = morre
			bola_x, bola_y = posicao_inicial[0], posicao_inicial[1]
			bola_varia_x, bola_varia_y = 0,0
			morte = True
			vida -= 1

		# Verificando a colisao com a barra
		if bola_y + altura_bola >= barra_y:
			if barra_x <= bola_x + largura_bola and bola_x <= barra_x + largura_barra:
				bola_varia_y = -bola_varia_y
				bola_y = bola_y - 5 # Tratamento da colisao lateral
				if not morte:
					som_barra.play(0)
				
			elif barra_x <= bola_x + largura_bola <= barra_x + largura_barra:
				bola_varia_y = -bola_varia_y
				
		# Verificando colisao com o tijolo
		bola_x1 = bola_x + largura_bola
		bola_y1 = bola_y + altura_bola
		

		
		for i in lista:
			if i[1] <= bola_y1 <= i[3] and i[0] < bola_x < i[2]: # Colisao abaixo do tijolo
				bola_varia_y = -bola_varia_y
				bola_y += 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[1] <= bola_y <= i[3] and i[0] < bola_x < i[2]: # Colisao acima do tijolo
				bola_varia_y = -bola_varia_y
				bola_y -= 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[0] <= bola_x <= i[2] and i[1] < bola_y < i[3]: # Colisao a direita do tijolo
				bola_varia_x = -bola_varia_x
				bola_x += 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[0] <= bola_x1 <= i[2] and i[1] < bola_y < i[3]: # Colisao a esquerda do tijolo
				bola_varia_x = -bola_varia_x
				bola_x -= 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break			

				
		tela.blit((fundo), (0,0))
		
		# Vidas
		fonte = pygame.font.Font(('fonts' + os.sep + 'rockwell.ttf'), 30)
		vidas = fonte.render('Vidas: '+str(vida), True, (255, 255, 0))	
		tela.blit(vidas, (300, 560))
		
		# Score
		fonte = pygame.font.Font(('fonts' + os.sep + 'rockwell.ttf'), 30)
		vidas = fonte.render('Score: '+str(score), True, (255, 255, 0))	
		tela.blit(vidas, (450, 560))
		
		if vida == 0:
			tela.blit(gameover, (0,0))
			pygame.display.flip()
			while 1:
				for event in pygame.event.get():
					if event.type == pygame.QUIT:
						sys.exit()
					if event.type == pygame.KEYDOWN:
						if event.key == pygame.K_ESCAPE:
							sys.exit()
						
		if lista == []: # Verifica se nao tem mais tijolos
			level2()
			while 1:
				restart = False
				for event in pygame.event.get():
					if event.type == pygame.QUIT:
						sys.exit()
					if event.type == pygame.KEYDOWN:
						if event.key == pygame.K_ESCAPE:
							sys.exit()

		
		for i in lista:
			tela.blit(tijolo, (i[0],i[1]))

			
		tela.blit(imagem_bola, (bola_x, bola_y))
		tela.blit(imagem_barra, (barra_x, barra_y))

		clock.tick(80)
		
		pygame.display.update()
	return score
	

def level2():
	# Carrega a musica de fundo
	pygame.mixer.init()
	pygame.mixer.music.load("sounds" + os.sep + "song1.mp3")
	pygame.mixer.music.set_volume(9)
	pygame.mixer.music.play(-1)

	# Som de colisao com a tela
	pong = pygame.mixer.Sound('sounds' + os.sep + 'pong.wav')
	pong.set_volume(.9) 

	# Som de colisao com o bouncer
	som_barra = pygame.mixer.Sound('sounds' + os.sep + 'barra.wav')

	# Som de colisao com o tijolo
	som_tijolo = pygame.mixer.Sound('sounds' + os.sep + 'slide.wav')
	som_tijolo.set_volume(.4)

	clock = pygame.time.Clock()
		 
	# Configuracao da tela
	largura_tela, altura_tela = 800, 600
	tela = pygame.display.set_mode((largura_tela,altura_tela), 0, 32)
	pygame.display.set_caption("Brick by Brick - Level 2")
	fundo = pygame.image.load("images" + os.sep + "fundolevel2.jpg").convert()
	gameover = pygame.image.load("images" + os.sep + "gameover2.jpg").convert()

	# Configuracao do tijolo
	tijolo = pygame.image.load("images" + os.sep + "tijolo1b.png").convert()
	largura_tijolo, altura_tijolo = tijolo.get_size()
	tijolo_x, tijolo_y = (90, 100)

	# Configuracao da Barra
	imagem_barra = pygame.image.load('images' + os.sep + "bouncer3.png").convert_alpha()
	largura_barra, altura_barra = imagem_barra.get_size()
	barra_x, barra_y = (largura_tela/2 - largura_barra/2), (altura_tela - altura_barra * 6)

	# Configuracao da Bola
	imagem_bola = pygame.image.load('images' + os.sep + "ball4.png").convert_alpha()
	largura_bola, altura_bola = imagem_bola.get_size()
	bola_x, bola_y = (largura_tela/2 - largura_bola/2), 500
	posicao_inicial = (bola_x, bola_y)
	bola_varia_x = 5 # Velocidade
	bola_varia_y = 5

	morte = True
	vida = 3
	max_vidas = 5
	score = 250
	fundocor = (0,0,0)

	x = 20 # Posicao dos tijolos
	y = 20
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	lista = []

	for i in range(30):
		lista.append((x, y, x1, y1))
		x+= 25
		x1 = x + largura_tijolo 
			
	x = 20
	y += altura_tijolo
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	for i in range(30):
		lista.append((x, y, x1, y1))
		x += 25	
		x1 = x + largura_tijolo 
				
	x = 20
	y += altura_tijolo
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	for i in range(30):
		lista.append((x, y, x1, y1))
		x += 25
		x1 = x + largura_tijolo

	sorteados = {} #### Nao da certo porque la em baixo (i) retorna (x,y,x1,y1)
	for i in range(20):
		sorteados[random.randint(0,len(lista))] = 0
			

	while True:
		bola_rect = imagem_bola 
		barra_rect = imagem_barra
		posicao_inicial = (barra_x+20, barra_y - 40)
		
		for event in pygame.event.get():
			if event.type == QUIT:
				exit()

			if event.type == KEYDOWN:
				if event.key == K_ESCAPE:
					exit()
				if event.key == K_SPACE:
					if morte:
						bola_varia_x, bola_varia_y = 5, 5
						morte = False
						
		pressed_keys = pygame.key.get_pressed()

		# Movimentando a bola
		bola_x += bola_varia_x
		bola_y += bola_varia_y

		# Movimentando a barra
		if pressed_keys[K_LEFT] and barra_x > 0:
			barra_x -= 10
		if pressed_keys[K_RIGHT] and barra_x < 680:
			barra_x += 10	
		if morte:
			bola_x, bola_y = barra_x + (largura_barra/2 - largura_bola/2), barra_y - altura_bola/1.40
			
		
		# Verificando a colisao com a tela
		if bola_x <= 0 or bola_x + largura_bola >= largura_tela:
			bola_varia_x = -bola_varia_x
			pong.play(0)
			
		if bola_y <= 0:
			bola_varia_y = -bola_varia_y
			pong.play(0)
				
		if bola_y <= barra_y:
			bola_varia_y = +bola_varia_y
			
		if bola_y + altura_bola >= 500: #evento = morre
			bola_x, bola_y = posicao_inicial[0], posicao_inicial[1]
			bola_varia_x, bola_varia_y = 0,0
			morte = True
			vida -= 1

		# Verificando a colisao com a barra
		if bola_y + altura_bola >= barra_y:
			if barra_x <= bola_x + largura_bola and bola_x <= barra_x + largura_barra:
				bola_varia_y = -bola_varia_y
				bola_y = bola_y - 5 # Tratamento da colisao lateral
				if not morte:
					som_barra.play(0)
				
			elif barra_x <= bola_x + largura_bola <= barra_x + largura_barra:
				bola_varia_y = -bola_varia_y
				
		# Verificando colisao com o tijolo
		bola_x1 = bola_x + largura_bola
		bola_y1 = bola_y + altura_bola
		

		
		for i in lista:
			if i[1] <= bola_y1 <= i[3] and i[0] < bola_x < i[2]: # Colisao abaixo do tijolo
				bola_varia_y = -bola_varia_y
				bola_y += 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[1] <= bola_y <= i[3] and i[0] < bola_x < i[2]: # Colisao acima do tijolo
				bola_varia_y = -bola_varia_y
				bola_y -= 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[0] <= bola_x <= i[2] and i[1] < bola_y < i[3]: # Colisao a direita do tijolo
				bola_varia_x = -bola_varia_x
				bola_x += 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[0] <= bola_x1 <= i[2] and i[1] < bola_y < i[3]: # Colisao a esquerda do tijolo
				bola_varia_x = -bola_varia_x
				bola_x -= 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break			

				
		tela.blit((fundo), (0,0))
		
		# Vidas
		fonte = pygame.font.Font(('fonts' + os.sep + 'rockwell.ttf'), 30)
		vidas = fonte.render('Vidas: '+str(vida), True, (255, 255, 0))	
		tela.blit(vidas, (300, 560))
		
		# Score
		fonte = pygame.font.Font(('fonts' + os.sep + 'rockwell.ttf'), 30)
		vidas = fonte.render('Score: '+str(score), True, (255, 255, 0))	
		tela.blit(vidas, (450, 560))
		
		if vida == 0:
			tela.blit(gameover, (0,0))
			pygame.display.flip()
			while 1:
				for event in pygame.event.get():
					if event.type == pygame.QUIT:
						sys.exit()
					if event.type == pygame.KEYDOWN:
						if event.key == pygame.K_ESCAPE:
							sys.exit()
						
		if lista == []: # Verifica se nao tem mais tijolos
			level3()
			while 1:
				restart = False
				for event in pygame.event.get():
					if event.type == pygame.QUIT:
						sys.exit()
					if event.type == pygame.KEYDOWN:
						if event.key == pygame.K_ESCAPE:
							sys.exit()

		
		for i in lista:
			tela.blit(tijolo, (i[0],i[1]))

			
		tela.blit(imagem_bola, (bola_x, bola_y))
		tela.blit(imagem_barra, (barra_x, barra_y))

		clock.tick(80)
		
		pygame.display.update()
	return score
	

def level3():
	# Carrega a musica de fundo
	pygame.mixer.init()
	pygame.mixer.music.load("sounds" + os.sep + "song5.mp3")
	pygame.mixer.music.set_volume(.7)
	pygame.mixer.music.play(-1)

	# Som de colisao com a tela
	pong = pygame.mixer.Sound('sounds' + os.sep + 'pong.wav')
	pong.set_volume(.8) 
	# Som de colisao com o bouncer
	som_barra = pygame.mixer.Sound('sounds' + os.sep + 'barra.wav')
	# Som de colisao com o tijolo
	som_tijolo = pygame.mixer.Sound('sounds' + os.sep + 'slide.wav')

	clock = pygame.time.Clock()
		 
	# Configuracao da tela
	largura_tela, altura_tela = 800, 600
	tela = pygame.display.set_mode((largura_tela,altura_tela), 0, 32)
	pygame.display.set_caption("Brick by Brick - Level 3")
	fundo = pygame.image.load("images" + os.sep + "fundolevel3.jpg").convert()
	gameover = pygame.image.load("images" + os.sep + "gameover2.jpg").convert()

	# Configuracao do tijolo
	tijolo = pygame.image.load("images" + os.sep + "tijolo4.png").convert()
	largura_tijolo, altura_tijolo = tijolo.get_size()
	tijolo_x, tijolo_y = (90, 100)

	# Configuracao da Barra
	imagem_barra = pygame.image.load('images' + os.sep + "bouncer3.png").convert_alpha()
	largura_barra, altura_barra = imagem_barra.get_size()
	barra_x, barra_y = (largura_tela/2 - largura_barra/2), (altura_tela - altura_barra * 6)

	# Configuracao da Bola
	imagem_bola = pygame.image.load('images' + os.sep + "ball4.png").convert_alpha()
	largura_bola, altura_bola = imagem_bola.get_size()
	bola_x, bola_y = (largura_tela/2 - largura_bola/2), 500
	posicao_inicial = (bola_x, bola_y)
	bola_varia_x = 12 # Velocidade
	bola_varia_y = 13

	morte = True
	vida = 3
	max_vidas = 5
	score = 1210
	fundocor = (0,0,0)

	x = 90 # Posicao dos tijolos
	y = 50
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	lista = []

	for i in range(11):
		lista.append((x, y, x1, y1))
		x+= 55
		x1 = x + largura_tijolo 
			
	x = 150
	y += altura_tijolo
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	for i in range(9):
		lista.append((x, y, x1, y1))
		x += 55	
		x1 = x + largura_tijolo 
				
	x = 260
	y += altura_tijolo
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	for i in range(5):
		lista.append((x, y, x1, y1))
		x += 55	
		x1 = x + largura_tijolo

	sorteados = {} #### Nao da certo porque la em baixo (i) retorna (x,y,x1,y1)
	for i in range(20):
		sorteados[random.randint(0,len(lista))] = 0
			

	while True:
		bola_rect = imagem_bola 
		barra_rect = imagem_barra
		posicao_inicial = (barra_x+20, barra_y - 40)
		
		for event in pygame.event.get():
			if event.type == QUIT:
				exit()

			if event.type == KEYDOWN:
				if event.key == K_ESCAPE:
					exit()
				if event.key == K_SPACE:
					if morte:
						bola_varia_x, bola_varia_y = 5, 5
						morte = False
						
		pressed_keys = pygame.key.get_pressed()

		# Movimentando a bola
		bola_x += bola_varia_x
		bola_y += bola_varia_y

		# Movimentando a barra
		if pressed_keys[K_LEFT] and barra_x > 0:
			barra_x -= 10
		if pressed_keys[K_RIGHT] and barra_x < 680:
			barra_x += 10	
		if morte:
			bola_x, bola_y = barra_x + (largura_barra/2 - largura_bola/2), barra_y - altura_bola/1.40
			
		
		# Verificando a colisao com a tela
		if bola_x <= 0 or bola_x + largura_bola >= largura_tela:
			bola_varia_x = -bola_varia_x
			pong.play(0)
			
		if bola_y <= 0:
			bola_varia_y = -bola_varia_y
			pong.play(0)
				
		if bola_y <= barra_y:
			bola_varia_y = +bola_varia_y
			
		if bola_y + altura_bola >= 500: #evento = morre
			bola_x, bola_y = posicao_inicial[0], posicao_inicial[1]
			bola_varia_x, bola_varia_y = 0,0
			morte = True
			vida -= 1

		# Verificando a colisao com a barra
		if bola_y + altura_bola >= barra_y:
			if barra_x <= bola_x + largura_bola and bola_x <= barra_x + largura_barra:
				bola_varia_y = -bola_varia_y
				bola_y = bola_y - 5 # Tratamento da colisao lateral
				if not morte:
					som_barra.play(0)
				
			elif barra_x <= bola_x + largura_bola <= barra_x + largura_barra:
				bola_varia_y = -bola_varia_y
				
		# Verificando colisao com o tijolo
		bola_x1 = bola_x + largura_bola
		bola_y1 = bola_y + altura_bola
		

		
		for i in lista:
			if i[1] <= bola_y1 <= i[3] and i[0] < bola_x < i[2]: # Colisao abaixo do tijolo
				bola_varia_y = -bola_varia_y
				bola_y += 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[1] <= bola_y <= i[3] and i[0] < bola_x < i[2]: # Colisao acima do tijolo
				bola_varia_y = -bola_varia_y
				bola_y -= 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[0] <= bola_x <= i[2] and i[1] < bola_y < i[3]: # Colisao a direita do tijolo
				bola_varia_x = -bola_varia_x
				bola_x += 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[0] <= bola_x1 <= i[2] and i[1] < bola_y < i[3]: # Colisao a esquerda do tijolo
				bola_varia_x = -bola_varia_x
				bola_x -= 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break			

				
		tela.blit((fundo), (0,0))
		
		# Vidas
		fonte = pygame.font.Font(('fonts' + os.sep + 'rockwell.ttf'), 30)
		vidas = fonte.render('Vidas: '+str(vida), True, (255, 200, 0))	
		tela.blit(vidas, (300, 560))
		
		# Score
		fonte = pygame.font.Font(('fonts' + os.sep + 'rockwell.ttf'), 30)
		vidas = fonte.render('Score: '+str(score), True, (255, 200, 0))	
		tela.blit(vidas, (450, 560))
		
		if vida == 0:
			tela.blit(gameover, (0,0))
			pygame.display.flip()
			while 1:
				for event in pygame.event.get():
					if event.type == pygame.QUIT:
						sys.exit()
					if event.type == pygame.KEYDOWN:
						if event.key == pygame.K_ESCAPE:
							sys.exit()
						
		if lista == []: # Verifica se nao tem mais tijolos
			level4()
			while 1:
				restart = False
				for event in pygame.event.get():
					if event.type == pygame.QUIT:
						sys.exit()
					if event.type == pygame.KEYDOWN:
						if event.key == pygame.K_ESCAPE:
							sys.exit()

		
		for i in lista:
			tela.blit(tijolo, (i[0],i[1]))

			
		tela.blit(imagem_bola, (bola_x, bola_y))
		tela.blit(imagem_barra, (barra_x, barra_y))

		clock.tick(110)
		
		pygame.display.update()
	return score

def level4():
	# Carrega a musica de fundo
	pygame.mixer.init()
	pygame.mixer.music.load("sounds" + os.sep + "song3.mp3")
	pygame.mixer.music.set_volume(.7)
	pygame.mixer.music.play(-1)

	# Som de colisao com a tela
	pong = pygame.mixer.Sound('sounds' + os.sep + 'pong.wav')
	pong.set_volume(.8) 
	# Som de colisao com o bouncer
	som_barra = pygame.mixer.Sound('sounds' + os.sep + 'barra.wav')
	# Som de colisao com o tijolo
	som_tijolo = pygame.mixer.Sound('sounds' + os.sep + 'slide.wav')

	clock = pygame.time.Clock()
		 
	# Configuracao da tela
	largura_tela, altura_tela = 800, 600
	tela = pygame.display.set_mode((largura_tela,altura_tela), 0, 32)
	pygame.display.set_caption("Brick by Brick - Level 4")
	fundo = pygame.image.load("images" + os.sep + "fundolevel4.jpg").convert()
	gameover = pygame.image.load("images" + os.sep + "gameover2.jpg").convert()

	# Configuracao do tijolo
	tijolo = pygame.image.load("images" + os.sep + "tijolo5.png").convert()
	largura_tijolo, altura_tijolo = tijolo.get_size()
	tijolo_x, tijolo_y = (90, 100)

	# Configuracao da Barra
	imagem_barra = pygame.image.load('images' + os.sep + "bouncer3.png").convert_alpha()
	largura_barra, altura_barra = imagem_barra.get_size()
	barra_x, barra_y = (largura_tela/2 - largura_barra/2), (altura_tela - altura_barra * 6)

	# Configuracao da Bola
	imagem_bola = pygame.image.load('images' + os.sep + "ball4.png").convert_alpha()
	largura_bola, altura_bola = imagem_bola.get_size()
	bola_x, bola_y = (largura_tela/2 - largura_bola/2), 500
	posicao_inicial = (bola_x, bola_y)
	bola_varia_x = 12 # Velocidade
	bola_varia_y = 13

	morte = True
	vida = 3
	max_vidas = 5
	score = 1450
	fundocor = (0,0,0)

	x = 90 # Posicao dos tijolos
	y = 50
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	lista = []

	for i in range(11):
		lista.append((x, y, x1, y1))
		x+= 55
		x1 = x + largura_tijolo 
			
	x = 150
	y += altura_tijolo
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	for i in range(9):
		lista.append((x, y, x1, y1))
		x += 55	
		x1 = x + largura_tijolo 
				
	x = 260
	y += altura_tijolo
	x1 = x + largura_tijolo
	y1 = y + altura_tijolo
	for i in range(5):
		lista.append((x, y, x1, y1))
		x += 55	
		x1 = x + largura_tijolo

	sorteados = {} #### Nao da certo porque la em baixo (i) retorna (x,y,x1,y1)
	for i in range(20):
		sorteados[random.randint(0,len(lista))] = 0
			

	while True:
		bola_rect = imagem_bola 
		barra_rect = imagem_barra
		posicao_inicial = (barra_x+20, barra_y - 40)
		
		for event in pygame.event.get():
			if event.type == QUIT:
				exit()

			if event.type == KEYDOWN:
				if event.key == K_ESCAPE:
					exit()
				if event.key == K_SPACE:
					if morte:
						bola_varia_x, bola_varia_y = 5, 5
						morte = False
						
		pressed_keys = pygame.key.get_pressed()

		# Movimentando a bola
		bola_x += bola_varia_x
		bola_y += bola_varia_y

		# Movimentando a barra
		if pressed_keys[K_LEFT] and barra_x > 0:
			barra_x -= 10
		if pressed_keys[K_RIGHT] and barra_x < 680:
			barra_x += 10	
		if morte:
			bola_x, bola_y = barra_x + (largura_barra/2 - largura_bola/2), barra_y - altura_bola/1.40
			
		
		# Verificando a colisao com a tela
		if bola_x <= 0 or bola_x + largura_bola >= largura_tela:
			bola_varia_x = -bola_varia_x
			pong.play(0)
			
		if bola_y <= 0:
			bola_varia_y = -bola_varia_y
			pong.play(0)
				
		if bola_y <= barra_y:
			bola_varia_y = +bola_varia_y
			
		if bola_y + altura_bola >= 500: #evento = morre
			bola_x, bola_y = posicao_inicial[0], posicao_inicial[1]
			bola_varia_x, bola_varia_y = 0,0
			morte = True
			vida -= 1

		# Verificando a colisao com a barra
		if bola_y + altura_bola >= barra_y:
			if barra_x <= bola_x + largura_bola and bola_x <= barra_x + largura_barra:
				bola_varia_y = -bola_varia_y
				bola_y = bola_y - 5 # Tratamento da colisao lateral
				if not morte:
					som_barra.play(0)
				
			elif barra_x <= bola_x + largura_bola <= barra_x + largura_barra:
				bola_varia_y = -bola_varia_y
				
		# Verificando colisao com o tijolo
		bola_x1 = bola_x + largura_bola
		bola_y1 = bola_y + altura_bola
		

		
		for i in lista:
			if i[1] <= bola_y1 <= i[3] and i[0] < bola_x < i[2]: # Colisao abaixo do tijolo
				bola_varia_y = -bola_varia_y
				bola_y += 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[1] <= bola_y <= i[3] and i[0] < bola_x < i[2]: # Colisao acima do tijolo
				bola_varia_y = -bola_varia_y
				bola_y -= 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[0] <= bola_x <= i[2] and i[1] < bola_y < i[3]: # Colisao a direita do tijolo
				bola_varia_x = -bola_varia_x
				bola_x += 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break
			if i[0] <= bola_x1 <= i[2] and i[1] < bola_y < i[3]: # Colisao a esquerda do tijolo
				bola_varia_x = -bola_varia_x
				bola_x -= 10
				if i in sorteados.keys():
					sorteados[i] += 1
					if sorteados[i] == 3:
						lista.remove(i)
				else: lista.remove(i)
				score += 10
				som_tijolo.play(0)
				break			

				
		tela.blit((fundo), (0,0))
		
		# Vidas
		fonte = pygame.font.Font(('fonts' + os.sep + 'rockwell.ttf'), 30)
		vidas = fonte.render('Vidas: '+str(vida), True, (0, 0, 0))	
		tela.blit(vidas, (300, 560))
		
		# Score
		fonte = pygame.font.Font(('fonts' + os.sep + 'rockwell.ttf'), 30)
		vidas = fonte.render('Score: '+str(score), True, (0, 0, 0))	
		tela.blit(vidas, (450, 560))
		
		if vida == 0:
			tela.blit(gameover, (0,0))
			pygame.display.flip()
			while 1:
				for event in pygame.event.get():
					if event.type == pygame.QUIT:
						sys.exit()
					if event.type == pygame.KEYDOWN:
						if event.key == pygame.K_ESCAPE:
							sys.exit()
						
		if lista == []: # Verifica se nao tem mais tijolos
			msg = pygame.font.Font(None,70).render("You Win", True, (255,255,0))
			msgrect = msg.get_rect()
			msgrect = msgrect.move(largura_tela / 2 - (msgrect.center[0]), altura_tela / 3)
			tela.blit(msg, msgrect)
			pygame.display.flip()
			while 1:
				restart = False
				for event in pygame.event.get():
					if event.type == pygame.QUIT:
						sys.exit()
					if event.type == pygame.KEYDOWN:
						if event.key == pygame.K_ESCAPE:
							sys.exit()

		
		for i in lista:
			tela.blit(tijolo, (i[0],i[1]))

			
		tela.blit(imagem_bola, (bola_x, bola_y))
		tela.blit(imagem_barra, (barra_x, barra_y))

		clock.tick(300)
		
		pygame.display.update()
	return score
